En este trabajo trataremos un ejercicio de machine learning con el objetivo de generar, entrenar, validar y testear modelos tanto de clasificación como de regresión.
Se utilizará un dataset que proviene de la Universidad de Minho, generado por P. Cortez. Dicho dataset se encuentra en el UC Irvine Machine Learning Repository (aquí) está disponible.
A partir del mismo, centraremos nuestro análisis de machine learning:
En primer lugar, importaremos nuestro dataset para iniciar un análisis descriptivo del mismo.
# Importamos bibliotecas necesarias:
import numpy as np
import pandas as pd
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_profiling
from IPython.display import Image
Revisamos que el directorio de trabajo del cual queremos extraer el dataset es el correcto, por si fuera necesario modificarlo.
print("Directorio de trabajo actual ", os.getcwd())
Con la ayuda de la función read_csv(), tendremos nuestros datos cargados en un dataframe de pandas.
df_vino = pd.read_csv(r'C:\Users\34662\Escritorio\MÁSTER DATA SCIENCE\Material Máster Data Science\3 - Python\Prácticas\Practica Ejercicio Machine Learning (clasificacion y regresion)\winequality.csv',
sep = ';')
df_vino.head()
df_vino["color"].value_counts()
El dataset contiene la información sobre distintos vinos, resumiendo las características de los mismos para poder extraer posteriormente si se trata de un vino tinto (rojo) o blanco. El número de entradas es de 1599 para el vino tinto y 4898 para el vino blanco.
O bien para extraer a través de regresiones la calidad del vino con valoraciones de 0 a 10.
A nivel de estructura, los atributos siguientes representan los inputs del dataset, ya que son los que están basados en tests fisicoquímicos por expertos que han analizado un muestreo de vinos:
1 - fixed acidity
2 - volatile acidity
3 - citric acid
4 - residual sugar
5 - chlorides
6 - free sulfur dioxide
7 - total sulfur dioxide
8 - density
9 - pH
10 - sulphates
11 - alcohol
En cambio, la variable output es la calidad (quality) del vino, que tiene una puntuación de entre 0 y 10 dependiendo de la calidad, y su variación se debe a la sensibilidad sobre las variables descritas anteriormente.
La variable de color será la que tendremos que ser capaz de clasificar lo mejor posible a lo largo del trabajo, por lo que a partir del resto de variables debemos ser capaces de clasificar el color de los vinos.
Posteriormente procederemos a realizar un modelo regresor que prediga lo mejor posible la calidad de los vinos, tratandola como el output de nuestro dataset.
df_vino.info()
Con la función .info() vemos que disponemos de un dataset con, aproximadamente 6497 elementos donde cada entrada es un vino. Se aprecia que no es un dataset de un tamaño muy elevado.
Para poder trabajar con el dataset, es importante conocer que tipo de datos que lo componen, su estructura y forma. Y sobretodo, si existen correlaciones entre variables con las que posteriormente podríamos jugar para obtener la mejor predicción de nuestro modelo.
Realizamos el método .describe() para conocer los valores y estadísticos principales de nuestros atributos.
df_vino.describe()
Con esto únicamente conoceremos el tipo de números y estadísticos de nuestro dataset, siempre es útil para describir, conocer los valores con los que trabajamos por encima.
Podemos conocer a través del resumen estadístico de la distribución de nuestras features numéricas:
La librería de panda profiling lleva varios niveles más allá la información dada por el método describe() de pandas. Generando un informe en HTML y CSS3 que aporta información estadística detallada y gráfica para cada variable de nuestro dataset.
# Guardamos el informe en nuestra carpeta del trabajo.
pR = pandas_profiling.ProfileReport(df_vino)
pR.to_file(output_file="Informe.html")
pandas_profiling.ProfileReport(df_vino)